package com.bw.message.config;


import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import jakarta.annotation.PostConstruct;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@Data
@Component
//读取yml文件中alipay 开头的配置
// 这是一个Spring框架中的配置类，使用了@ConfigurationProperties注解来绑定以"alipay"为前缀的配置项。
@ConfigurationProperties(prefix = "alipay")
public class AliPayConfig {

    // 配置类的属性，分别对应支付宝配置中的appId、私钥、公钥、通知URL和回调URL
    private String appId;
    private String appPrivateKey;
    private String alipayPublicKey;
    private String notifyUrl;
    private String returnUrl;

    // @PostConstruct注解的方法会在Bean初始化后被调用
    @PostConstruct
    public void init() {
        // 创建一个Config对象，用于设置支付宝的相关配置信息
        Config config = new Config();

        // 设置协议类型，支付宝推荐使用https协议
        config.protocol = "https";

        // 设置支付宝开放平台的网关地址，这里使用的是沙箱环境地址（开发/测试环境）
        config.gatewayHost = "openapi.alipaydev.com";

        // 设置签名方式，支付宝推荐使用RSA2签名方式
        config.signType = "RSA2";

        // 设置应用ID，来自配置文件中的alipay.appId
        config.appId = this.appId;

        // 设置商户私钥，来自配置文件中的alipay.appPrivateKey
        config.merchantPrivateKey = this.appPrivateKey;

        // 设置支付宝公钥，来自配置文件中的alipay.alipayPublicKey
        config.alipayPublicKey = this.alipayPublicKey;

        // 设置支付通知地址，来自配置文件中的alipay.notifyUrl
        config.notifyUrl = this.notifyUrl;

        // 通过Factory.setOptions()方法将配置信息传入支付宝SDK
        Factory.setOptions(config);

        // 打印初始化成功的日志
        System.out.println("=======支付宝SDK初始化成功=======");
    }
}

